/*
 * DbUtil.h
 *
 *  Created on: 2018年1月3日
 *      Author: chuanjiang.zh@qq.com
 */

#ifndef DBUTIL_H_
#define DBUTIL_H_

#include "DbType.h"
#include <vector>


namespace db
{

typedef std::vector< int >          IntArray;
typedef std::vector< std::string >  StringArray;


class DbUtil
{
public:
	DbUtil();
	virtual ~DbUtil();

	static std::string getBackendName(soci::session& session);

	static bool validate(soci::session& session, DbSourceType dbType, int& category, std::string& err);
	static bool isCrashed(DbSourceType dbType, int category, const std::string& err);


    static bool validate(soci::session& session, DbSourceType dbType);

    static bool validateMysql(soci::session& session);

    static bool validateOracle(soci::session& session);

    static bool validateOdbc(soci::session& session);

    static bool reconnect(soci::session& session);


    static bool get(soci::row& r, const char* name, std::string& value);

    static bool get(soci::row& r, const char* name, int& value);

    static bool getShortTime(soci::row& r, const char* name, time_t& value);

    static bool getDateTime(soci::row& r, const char* name, time_t& value);

    static std::string formatTime(time_t t);

    static std::string makeInSql(const char* col, const IntArray& values);
    static std::string makeInSql(const char* col, const StringArray& values);

    static void sleepMs(unsigned int ms);

    static bool isSqlite(soci::session& session);

    static std::string escapePath(const std::string& src);

	static std::string escape(const std::string& src);

};


} /* namespace db */

#endif /* DBUTIL_H_ */
